# -*- coding: utf-8 -*-
"""历史记录API的数据验证模式

此模块定义历史记录API使用的数据验证模式，使用Marshmallow进行数据验证和序列化。
"""

from marshmallow import Schema, fields, validate


class HistoryRecordSchema(Schema):
    """历史记录单条记录的验证模式
    
    用于验证和序列化历史记录的基本信息
    """
    id = fields.Int(dump_only=True)  # 记录唯一ID，只用于序列化输出
    title = fields.Str(required=True, validate=validate.Length(max=100))  # 任务标题，必填，最大长度100
    description = fields.Str(required=True)  # 任务描述，必填
    status = fields.Str(required=True, validate=validate.OneOf(['completed', 'pending', 'failed', 'replay']))  # 任务状态，必填，只能是指定值之一
    type = fields.Str(required=True, validate=validate.OneOf(['normal', 'replay']))  # 任务类型，必填，只能是指定值之一
    timestamp = fields.Str(dump_only=True)  # 创建时间戳，只用于序列化输出
    canReplay = fields.Bool()  # 是否可以回放


class HistoryListSchema(Schema):
    """历史记录列表的验证模式
    
    用于验证和序列化历史记录列表数据
    """
    histories = fields.List(fields.Nested(HistoryRecordSchema))  # 历史记录列表，包含多条历史记录


class HistoryDeleteSchema(Schema):
    """历史记录删除的验证模式
    
    用于验证删除历史记录的请求参数
    """
    message = fields.Str(dump_only=True)  # 删除成功的消息提示，只用于序列化输出


class HistoryExportSchema(Schema):
    """历史记录导出的验证模式
    
    用于验证导出历史记录的请求参数
    """
    format = fields.Str(required=True, validate=validate.OneOf(['json', 'csv', 'pdf']))  # 导出格式，必填，只能是指定值之一
    include = fields.List(fields.Str(validate=validate.OneOf(['summary', 'details', 'statistics', 'screenshots'])))  # 包含的数据类型，可选
    filters = fields.Dict()  # 筛选条件，可选